import { defineStore } from 'pinia';

// 定义报警事件类型
export const useAlarmStore = defineStore('alarm', {
  state: () => ({
    // 报警事件列表
    alarmEvents: [],
    // 用于跟踪当前报警状态，避免重复弹出消息
    currentAlarms: new Set(),
  }),
  
  actions: {
    // 添加新的报警事件
    addAlarmEvent(event) {
      // 使用传入的ID（如果有）或生成默认ID
      const eventId = event.id || `${event.variableName}-${event.timestamp}`;
      
      // 检查是否为重复事件
      if (!this.alarmEvents.some(alarm => alarm.id === eventId)) {
        const newAlarm = {
          id: eventId,
          timestamp: event.timestamp || new Date().toLocaleString(),
          variableName: event.variableName,
          eventType: event.eventType || '报警',
          description: event.description,
          level: event.level || 'warning',
          sequence: this.alarmEvents.length + 1,
        };
        
        // 添加到事件列表开头，保持最新的在前面
        this.alarmEvents.unshift(newAlarm);
        
        // 限制报警事件数量，避免内存占用过多
        if (this.alarmEvents.length > 100) {
          this.alarmEvents = this.alarmEvents.slice(0, 100);
        }
        
        // 更新序号
        this.alarmEvents.forEach((alarm, index) => {
          alarm.sequence = index + 1;
        });
        
        return newAlarm;
      }
      
      return null;
    },
    
    // 记录当前活动报警，避免重复弹出消息
    addActiveAlarm(alarmId) {
      this.currentAlarms.add(alarmId);
    },
    
    // 移除活动报警
    removeActiveAlarm(alarmId) {
      this.currentAlarms.delete(alarmId);
    },
    
    // 检查报警是否已经在活动状态
    isAlarmActive(alarmId) {
      return this.currentAlarms.has(alarmId);
    },
    
    // 清除所有报警事件
    clearAllAlarms() {
      this.alarmEvents = [];
      this.currentAlarms.clear();
    },
    
    // 按级别获取报警事件
    getAlarmsByLevel(level) {
      return this.alarmEvents.filter(alarm => alarm.level === level);
    },
    
    // 获取最近的报警事件
    getRecentAlarms(count = 10) {
      return this.alarmEvents.slice(0, count);
    },
  },
});